package com.example.skudemo.core.mybatis;

import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import com.example.skudemo.core.exception.CommonException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class MybatisPlusConfig {
    /**
     * tenant_id 字段名
     */
    public static final String TENANT_FIELD = "tenant_id";

    /**
     * 有哪些表需要做多租户 这些表需要添加一个字段 ，字段名和tenant_field对应的值一样
     */

    private static final List<String> TENANT_IGNORE_TABLE = new ArrayList<>();

    static {
        TENANT_IGNORE_TABLE.add("spu");
    }

    /**
     * mybatis分页插件,处理total=0的场景
     *
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor page = new PaginationInterceptor();
//        TenantSqlParser tenantSqlParser = new TenantSqlParser().setTenantHandler(new TenantHandler() {
//            // 设置租户id
//            @Override
//            public Expression getTenantId(boolean where) {
//                // 先临时写死
//                Integer tenantId = 1;
//                if (tenantId.equals(0)) {
//                    throw new CommonException("租户id不能为空");
//                }
//                return new LongValue(tenantId);
//            }
//
//            // 设置租户id对应的表字段
//            @Override
//            public String getTenantIdColumn() {
//                return TENANT_FIELD;
//            }
//
//            // 表级过滤器
//            @Override
//            public boolean doTableFilter(String tableName) {
//                return TENANT_IGNORE_TABLE.stream().anyMatch(t -> t.equalsIgnoreCase(tableName));
//            }
//        });
//        List<ISqlParser> list1 = new ArrayList<>();
//        list1.add(tenantSqlParser);
//        page.setSqlParserList(list1);
        page.setDialectType("mysql");
        return page;
    }
}













